資料搜集後常會分布在不同的檔案中,使用Pandas讀取後再將資料合併。Pandas提供了append(資料附加)、concat(資料串接)及merge(資料融合)進行資料合併。
1.資料附加
將資料加在原始資料的後方,語法如下:
DataFrame變數A.append(DataFrame變數B,ignore_index=布林值)
ignore_index:是否重新建立索引,預設為False,不會重新建立索引。
若附加時有欄位不相符時,會保留所有欄位,原始資料中沒有的欄位資料會以空值填充。
2.資料串接
pd.concat([DataFrame變數A,DataFrame變數B],ignore_index=布林值,join=合併方式)
ignore_index:是否重新建立索引,預設為False。
join:"outer"為聯集-保留所有欄位(與append相同),此為預設值,"inner"為交集-共同的欄位才會保留(如果資料有NaN時)。
3.資料融合
merge為最常使用的資料合併方式。
pd.merge(DataFrame變數A,DataFrame變數B, left_on=欄位, right_on=欄位,suffixes=[後綴文字1,後綴文字2,...],how=合併方式)
left_on:設定第一個資料集為合併欄位基準。
right_on:設定第二個資料集為合併欄位基準。
on:設定第二個資料集共同欄位為合併欄位基準。
suffixes:設定值為一串列,若合併資料有相同欄位名稱,則可以此參數加後綴名稱以示區別。
how:
(1)outer(聯集)-會保留所有欄位
(2)inner(交集)-只會保留共同欄位
(3)left-保留第一個資料集所有欄位資料
(4)right-保留第二個資料集所有欄位資料
(1)一對一融合
pd.merge(DataFrame變數A,DataFrame變數B,how=合併方式)
how非必要參數,預設為inner(交集),故若省略則合併將保留共同索引(第一欄位)及所有欄位的資料。
若how為outer(聯集),則所有資料(索引(列)+欄位(行))都保留,缺值欄位以NaN填充。
(2)指定欄位融合
當兩邊index不一樣時可以使用left_on和right_on來指定merge的index。
若有A及B二個共同的欄位,使用left_on和right_on參數來指定融合參考欄位為A,融合後系統會自動替相同欄位B名稱後面加上「B_x」及「B_y」後綴做為區別。
pd.merge(DataFrame變數A,DataFrame變數B, left_on=欄位A, right_on=欄位A)
(3)自定義重覆欄位名稱後綴文字
a.在merge中當欄位名稱重覆時,使用suffixes來自定義欄位名稱後綴文字。
pd.merge(DataFrame變數A,DataFrame變數B, left_on=欄位, right_on=欄位,suffixes=[欄位名稱加1,欄位名稱加2])
使用suffixes參數為串列,記得加中括號[]。
以上"left_on=欄位, right_on=欄位"相同時亦可簡化為"on=欄位"。
b.將重複的欄位b使用drop語法刪除。
pd.merge(ironman6, ironman13, left_on=欄位a, right_on=欄位b).drop(欄位b',axis=1)
<範例說明>資料融合
import pandas as pd
df1=pd.DataFrame([[1,7,6],[2,4,2]],columns=['水果號碼','芭樂','香蕉',])
df2=pd.DataFrame([[2,4,2],[3,9,5],[4,2,8]],columns=['水果號碼','橘子','檸檬'])
print(df1)
print(df2)
水果號碼 芭樂 香蕉
0 1 7 6
1 2 4 2
水果號碼 橘子 檸檬
0 2 4 2
1 3 9 5
2 4 2 8
pd.merge(df1,df2)
水果號碼 芭樂 香蕉 橘子 檸檬
0 2 4 2 4 2
pd.merge(df1,df2,how='outer')
水果號碼 芭樂 香蕉 檸檬
0 1 7 6.0 NaN
1 2 4 2.0 NaN
2 1 4 NaN 2.0
3 2 9 NaN 5.0
4 3 2 NaN 8.0
import pandas as pd
df1=pd.DataFrame([[1,7,6],[2,4,2]],columns=['水果號碼','芭樂','香蕉',])
df2=pd.DataFrame([[1,4,2],[2,9,5],[3,2,8]],columns=['水果號碼','芭樂','檸檬'])
print(df1)
print(df2)
pd.merge(df1,df2,left_on='水果號碼', right_on='水果號碼')
水果號碼 芭樂 香蕉
0 1 7 6
1 2 4 2
水果號碼 芭樂 檸檬
0 1 4 2
1 2 9 5
2 3 2 8
水果號碼 芭樂_x 香蕉 芭樂_y 檸檬
0 1 7 6 4 2
1 2 4 2 9 5
import pandas as pd
df1=pd.DataFrame([[1,7,6],[2,4,2]],columns=['水果號碼','芭樂','香蕉',])
df2=pd.DataFrame([[1,4,2],[2,9,5],[3,2,8]],columns=['水果號碼','芭樂','檸檬'])
print(df1)
print(df2)
pd.merge(df1,df2,left_on='水果號碼', right_on='水果號碼',suffixes=['_1','_2'])
水果號碼 芭樂 香蕉
0 1 7 6
1 2 4 2
水果號碼 芭樂 檸檬
0 1 4 2
1 2 9 5
2 3 2 8
水果號碼 芭樂_1 香蕉 芭樂_2 檸檬
0 1 7 6 4 2
1 2 4 2 9 5
資料合併完成後,明天開始學習資料查看囉~